#ifndef GAMEENGINE_GRAPHICS_CAMERA_ISOMETRIC_CAMERA_MANIPULATOR_H
#define GAMEENGINE_GRAPHICS_CAMERA_ISOMETRIC_CAMERA_MANIPULATOR_H

#include <GameEngine/Graphics/graphics_settings.h>

#include <GameEngine/Graphics/Camera/camera_manipulator.h>
#include <GameEngine/Geometry/Core/interval.h>
#include <GameEngine/Geometry/Core/angle.h>


#ifdef GAMEENGINE_NAMESPACES
namespace GameEngine {
#endif


//! An implementation of a camera manipulator meant for isometric map examination
/*!
 *  The CameraManipulatorIsometric allows to zoom, pan and rotate in a limited
 *  subset of angles. It is typically meant to explore isometric maps (although
 *  it is not limited to this purpose).
 */
class _Graphics_decl CameraManipulatorIsometric : public CameraManipulator {
	Q_OBJECT

public:
	CameraManipulatorIsometric();
	CameraManipulatorIsometric(const CameraManipulatorIsometric& rhs);
	CameraManipulatorIsometric& operator=(const CameraManipulatorIsometric& rhs);
	virtual ~CameraManipulatorIsometric();

	virtual bool manipulate(MouseButton button, const Vector2d<int>& mouse_move);

	bool& horizontal_rotation();
	bool horizontal_rotation() const;

	bool& vertical_pan();
	bool vertical_pan() const;

protected:
	//! Allow horizontal rotation
	bool horizontal_rotation_;

	//! Allow vertical pan
	bool vertical_pan_;
};

//========================================================

#ifdef GAMEENGINE_NAMESPACES
} // namespace GameEngine
#endif

#endif
